package br.skytef.stmanager.daos;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import br.skytef.stmanager.entities.ProdutoClienteEntity;
import br.skytef.stmanager.utils.Pool;

public class ProdutoClienteDao {

	/**
	 * Variável para conexão, obtido através de um Pool(br.skytef.stmanager.utils.Pool)
	 */
	private static Connection conexao = null;	
	/**
	 * Inserir nova tarefa/registro
	 * @param novaTarefa
	 */

	public void inserir(ProdutoClienteEntity produtoCliente){
		try {
			conexao = Pool.getConnection();
			String query = "INSERT INTO produtoCliente (vpn_ativa, serial, situacao, dataSituacao,"
					+ "dataSolicitacao, dataInclusao, terminal, arquivoLicenca, tipoTarefa, dataExclusao, "
					+ "produto_id, cliente_idCliente, tipoVpn, dataAtivacao) "
					+ "VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?);";
			
			PreparedStatement preparedStmt = conexao.prepareStatement(query);
			preparedStmt.setString				(1,produtoCliente.getVpn_ativa());
			preparedStmt.setString				(2,produtoCliente.getSerial());
			preparedStmt.setString			    (3,produtoCliente.getSituacao());
			preparedStmt.setTimestamp			(4,produtoCliente.getDataSituacao());
			preparedStmt.setTimestamp			(5,produtoCliente.getDataSolicitacao());
			preparedStmt.setTimestamp			(6,produtoCliente.getDataInclusao());
			preparedStmt.setString				(7,produtoCliente.getTerminal());
			preparedStmt.setString				(8,produtoCliente.getArquivoLicenca());
			preparedStmt.setString				(9,produtoCliente.getTipoTarefa());
			preparedStmt.setTimestamp			(10,produtoCliente.getDataExclusao());
			preparedStmt.setInt					(11,produtoCliente.getProduto_id());
			preparedStmt.setInt					(12,produtoCliente.getCliente_idCliente());
			preparedStmt.setString				(13,produtoCliente.getTipoVpn());
			preparedStmt.setString				(14,produtoCliente.getDataAtivacao());
			preparedStmt.execute();	
			conexao.close();

		} catch (SQLException e) {
			System.out.println("SQL erro: "+ e);
		}catch (ClassCastException e) {
			System.out.println("Classe erro: "+ e);
		} catch (Exception e) {
			System.out.println("Geral erro: "+ e);
		}
	}
	
	public void alterar(ProdutoClienteEntity produtoCliente){
		try {
			conexao = Pool.getConnection();
			String query = "UPDATE produtoCliente SET vpn_ativa=?, serial=?, situacao=?, dataSituacao=?,"
					+ "dataSolicitacao=?, terminal=?, arquivoLicenca=?, tipoTarefa=?, dataInclusao=?, dataExclusao=?, "
					+ "produto_id=?, cliente_idCliente=?, tipoVpn=?, dataAtivacao=? "
					+ "WHERE id=? ;";
			
			PreparedStatement preparedStmt = conexao.prepareStatement(query);
			preparedStmt.setString				(1,produtoCliente.getVpn_ativa());
			preparedStmt.setString				(2,produtoCliente.getSerial());
			preparedStmt.setString			    (3,produtoCliente.getSituacao());
			preparedStmt.setTimestamp			(4,produtoCliente.getDataSituacao());
			preparedStmt.setTimestamp			(5,produtoCliente.getDataSolicitacao());
			preparedStmt.setString				(6,produtoCliente.getTerminal());
			preparedStmt.setString				(7,produtoCliente.getArquivoLicenca());
			preparedStmt.setString				(8,produtoCliente.getTipoTarefa());
			preparedStmt.setTimestamp			(9,produtoCliente.getDataInclusao());
			preparedStmt.setTimestamp			(10,produtoCliente.getDataExclusao());
			preparedStmt.setInt					(11,produtoCliente.getProduto_id());
			preparedStmt.setInt					(12,produtoCliente.getCliente_idCliente());
			preparedStmt.setString				(13,produtoCliente.getTipoVpn());
			preparedStmt.setString				(14,produtoCliente.getDataAtivacao());
			preparedStmt.setInt					(15,produtoCliente.getId());
			preparedStmt.execute();	
			conexao.close();

		} catch (SQLException e) {
			System.out.println("SQL erro: "+ e);
		}catch (ClassCastException e) {
			System.out.println("Classe erro: "+ e);
		} catch (Exception e) {
			System.out.println("Geral erro: "+ e);
		}
	}
	
	public ProdutoClienteEntity localizar(int idCliente, Integer produto) {
		ProdutoClienteEntity prodCli = null;
		try	{
			conexao = Pool.getConnection();
			Statement st = conexao.createStatement();
			ResultSet rs = st.executeQuery("SELECT * FROM produtoCliente WHERE cliente_idCliente = "+ idCliente +" AND produto_id = "+ produto +";");
			if (rs.next()) {
				do {      
					 prodCli = new ProdutoClienteEntity();
					 prodCli.setId(rs.getInt("id"));
					 prodCli.setVpn_ativa(rs.getString("vpn_ativa"));
					 prodCli.setSerial(rs.getString("serial"));
					 prodCli.setSituacao(rs.getString("situacao"));
					 prodCli.setDataSituacao(rs.getTimestamp("dataSituacao"));
					 prodCli.setDataSolicitacao(rs.getTimestamp("dataSolicitacao"));
					 prodCli.setTerminal(rs.getString("terminal"));
					 prodCli.setArquivoLicenca(rs.getString("arquivoLicenca"));
					 prodCli.setTipoTarefa(rs.getString("tipoTarefa"));
					 prodCli.setDataInclusao(rs.getTimestamp("dataInclusao"));
					 prodCli.setDataExclusao(rs.getTimestamp("dataExclusao"));
					 prodCli.setProduto_id(rs.getInt("produto_id"));
					 prodCli.setCliente_idCliente(rs.getInt("cliente_idCliente"));
					 prodCli.setTipoVpn(rs.getString("tipoVpn"));
					 prodCli.setDataAtivacao(rs.getString("dataAtivacao"));
				} while (rs.next());
			}
			conexao.close();			
		}catch (SQLException e) {
			System.out.println("SQL erro: "+ e);
		} catch (Exception e) {
			System.out.println("Geral erro: "+ e);
		} 
		return prodCli;
	}	
	
	
	public List <ProdutoClienteEntity>  localizarLista(int idCliente) {
		List <ProdutoClienteEntity> prodClientes = null;
		ProdutoClienteEntity prodCliente;
		try	{
			conexao = Pool.getConnection();
			Statement st = conexao.createStatement();
			ResultSet rs = st.executeQuery("SELECT pc.id,pc.vpn_ativa,pc.serial,pc.situacao,pc.dataSituacao,pc.dataSolicitacao,pc.terminal,pc.arquivoLicenca,"
					+ "pc.tipoTarefa,pc.produto_id,pc.tipoVpn,pc.dataAtivacao,p.nome, pc.cliente_idCliente FROM produtoCliente as pc "
					+ "INNER JOIN produto as p ON pc.produto_id = p.id "
					+ "WHERE cliente_idCliente = "+ idCliente +";");
			if (rs.next()) {
				prodClientes = new ArrayList<ProdutoClienteEntity>();
				do {      
					prodCliente = new ProdutoClienteEntity();
					prodCliente.setId(rs.getInt("id"));
					prodCliente.setVpn_ativa(rs.getString("vpn_ativa"));
					prodCliente.setSerial(rs.getString("serial"));
					prodCliente.setSituacao(rs.getString("situacao"));
					prodCliente.setDataSituacao(rs.getTimestamp("dataSituacao"));
					prodCliente.setDataSolicitacao(rs.getTimestamp("dataSolicitacao"));
					prodCliente.setTerminal(rs.getString("terminal"));
					prodCliente.setArquivoLicenca(rs.getString("arquivoLicenca"));
					prodCliente.setTipoTarefa(rs.getString("tipoTarefa"));
					prodCliente.setProduto_id(rs.getInt("produto_id"));
					prodCliente.setTipoVpn(rs.getString("tipoVpn"));
					prodCliente.setDataAtivacao(rs.getString("dataAtivacao"));
					prodCliente.setNomeProduto(rs.getString("nome"));
					prodCliente.setCliente_idCliente(rs.getInt("cliente_idCliente"));
					prodClientes.add(prodCliente);
				} while (rs.next());
			}
			conexao.close();
		} catch (SQLException e) {
			System.out.println("SQL erro: "+ e);
		} catch (Exception e) {
			System.out.println("Geral erro: "+ e);
		}
		return prodClientes;
	}	
	public ProdutoClienteEntity  localizar(int idCliente) {
		ProdutoClienteEntity prodCliente = new ProdutoClienteEntity();
		try	{
			conexao = Pool.getConnection();
			Statement st = conexao.createStatement();
			ResultSet rs = st.executeQuery("SELECT pc.id,pc.vpn_ativa,pc.serial,pc.situacao,pc.dataSituacao,pc.dataSolicitacao,pc.terminal,pc.arquivoLicenca,"
					+ "pc.tipoTarefa,pc.produto_id,pc.tipoVpn,pc.dataAtivacao,p.nome, pc.cliente_idCliente FROM produtoCliente as pc "
					+ "INNER JOIN produto as p ON pc.produto_id = p.id "
					+ "WHERE cliente_idCliente = "+ idCliente +";");
			if (rs.next()) {    
					prodCliente = new ProdutoClienteEntity();
					prodCliente.setId(rs.getInt("id"));
					prodCliente.setVpn_ativa(rs.getString("vpn_ativa"));
					prodCliente.setSerial(rs.getString("serial"));
					prodCliente.setSituacao(rs.getString("situacao"));
					prodCliente.setDataSituacao(rs.getTimestamp("dataSituacao"));
					prodCliente.setDataSolicitacao(rs.getTimestamp("dataSolicitacao"));
					prodCliente.setTerminal(rs.getString("terminal"));
					prodCliente.setArquivoLicenca(rs.getString("arquivoLicenca"));
					prodCliente.setTipoTarefa(rs.getString("tipoTarefa"));
					prodCliente.setProduto_id(rs.getInt("produto_id"));
					prodCliente.setTipoVpn(rs.getString("tipoVpn"));
					prodCliente.setDataAtivacao(rs.getString("dataAtivacao"));
					prodCliente.setNomeProduto(rs.getString("nome"));
					prodCliente.setCliente_idCliente(rs.getInt("cliente_idCliente"));
			}else{
				prodCliente = null;
			}
			conexao.close();
		} catch (SQLException e) {
			System.out.println("SQL erro: "+ e);
			prodCliente = null;
		} catch (Exception e) {
			System.out.println("Geral erro: "+ e);
			prodCliente = null;
		}
		return prodCliente;
	}	

}